//分发action的函数
//每一个异步的action都有一个与之对应的同步action
import {message} from 'antd';
import {receiveUser,failToGetUser,receiveCatecorylist,receSubCateGory,receiveProducts} from './action-types'
import {LoginAPI,GetUser,reqAddCategory,reqUpdate,reqGetCategoryList,reqProduct,reqSearchProduce,reqChangeState,reqGetClass} from '../api/index'
import Cookies from 'js-cookie';
//得到用户
 const ReceiveUser = (user)=>({type:receiveUser,data:user})

 //保存一级分类列表的数据的同步action
 const GetCategoryListSync = (categoryList)=>({type:receiveCatecorylist,data:categoryList})
 //保存二级分类数据的同步action
 const GetSubCategoryListSync = (subCategoryList)=>({type:receSubCateGory,data:subCategoryList})
 //得到商品的同步action
 const GetProductsSync = (productsList)=>({type:receiveProducts,data:productsList})
 
 //此函数作废
 //cookie自动登录失效
 const FailToLogin = (msg) =>({type:failToGetUser,data:msg})






 //登录
 export const toLogin = (username,password)=>{
    return async dispatch=>{
         //发送请求
         let {data} = await LoginAPI(username,password)
         if(data.status==1){
            message.error(data.msg)
         }else{
            message.success("登录成功")
            //分发同步action
            dispatch(ReceiveUser(data.data))
         }
         
    }
 }
 //判断能否自动登录
 export const GetUserAPI = (userid) =>{
    return async dispatch=>{
       let {data} = await GetUser(userid)
       console.log(data)
       if (data.code==1) {
          //这里可能 1.登录修改cookie,再刷新界面
         // dispatch(FailToLogin(data))
          message.error("身份信息错误，请重新登录")
          setTimeout(()=>{
            window.location.reload();
          },1500)
          
          //清除cookie
         Cookies.remove("userid")
         
       } else {
          dispatch(ReceiveUser(data.data))
       }
    }
 }

 //获取分类列表
 export const GetCategoryList = (parentId)=>{
    return async dispatch=>{
      let {data} = await reqGetCategoryList(parentId)
      console.log("这是分类的数据",data)
      //获取到的可能是一级分类也可能是二级分类数据
      if(data.status===0){
         //分发action进行保存列表数据
         if(parentId==='0'){
            dispatch(GetCategoryListSync(data.data))
         }else{
            //分发保存二级分类的action
            dispatch(GetSubCategoryListSync(data.data))
         }
        
      }else{
         message.error("网络状态不好请刷新后重试")
      }
    }
 }
//下面两个方法没有设置dispatch分发action，所以不能用用redux-thunk进行
//包装，否者就会报错，这两个方法只能作为普通的函数import即可
 //更新分类 
 export const UpdateCategory = async ({categoryId,categoryName})=>{

   let {data} = await reqUpdate({categoryId,categoryName})
   if(data.status===0){
      message.success("更新分类成功")
   }else{
      message.error("更新分类失败请重新尝试")
   }
 }
 //添加分类
 export const Addcategory = async ({parentId,categoryName})=>{

   let {data} = await reqAddCategory({parentId,categoryName})
   if(data.status===0){
      message.success("添加分类成功")
      window.location.reload();
   }else{
      message.error("添加分类失败")
   }
 }

 //商品管理的action
 //这里和获取分类列表的时候不一样
 //获取分类列表的时候使用的前台分页，一次性获取所有数据
 //商品分类是后台分页，每一次只请求当前页面的数据
 export const GetProducts = ({pageNum,pageSize})=>{
      return async dispatch=>{
       const {data} = await reqProduct({pageNum,pageSize})
       if(data.status===0){
          //成功
          dispatch(GetProductsSync(data.data))
         // message.success("当前的分页数据获取成功")
       }else{
          message.error("网络状态不好，请稍后再试")
       }
    }
    
 }
 //this.props.SearchProduce(1,5,this.state.searchType,this.state.searchKey)
 export const SearchProduce = (pageNum,pageSize,searchType,detail)=>{
      return async dispatch=>{
       const {data} = await reqSearchProduce(pageNum,pageSize,searchType,detail)
       if(data.status===0){
          //成功
          dispatch(GetProductsSync(data.data))
         // message.success("当前的分页数据获取成功")
       }else{
          message.error("网络状态不好，请稍后再试")
       }
    }
    
 }

 //修改商品的状态，这个方法也不需要分发action
 export const UpdateState = async (productId,status)=>{
    let {data} = await reqChangeState(productId,status)
    if(data.status===0){
      status === 0 ? message.success("下架成功") :message.success("上架成功")
    }else{
       status===0 ? message.success("下架失败，请稍后重试") :message.success("上架失败，请稍后重试")
    }
 }
 //获取商品所属分类信息，这个需要发送两个请求，同样不需要分发action
 export const GetClass = ({categoryId,pCategoryId})=>{
   //分开发送效率太低
  return  Promise.all([reqGetClass(categoryId),reqGetClass(pCategoryId)])
 }